import Vue from 'vue'
//1.导入vuex
import Vuex ,{Store} from 'vuex'
//日志插件
import createLogger from 'vuex/dist/logger'
//持久化插件
import createPersistedState from "vuex-persistedstate";

import {shop_favlist,shopcart_list, shop_fav,shop_unfav,shopcart_clear,shopcart_add,shopcart_sub,address_list} from '../utils/api'


//2.注册vuex
Vue.use(Vuex)
//3.实例化vuex
export default new Vuex.Store({
  state: {//负责存储数据
    collectlist:[],
    shopcartlist:[],
    addresslist:[],
  },
  getters: {//定义计算方法（类似于组件中的计算属性）
  },
  mutations: {//定义同步方法  特点：同步方法可以直接修改state中的数据
    collect(state,payload){
      state.collectlist.push(payload);
    },//收藏一个店铺
    cancel_collect(state,payload){
      var index = state.collectlist.findIndex((item)=>{
        return item.mtWmPoiId == payload.mtWmPoiId;
      })
      if( index != -1 ){
        state.collectlist.splice(index,1);
      }
    },//取消收藏一个店铺
    save_favlist(state,payload){
      state.collectlist = payload;
    },//保存收藏列表
    save_shopcartlist(state,payload){
      state.shopcartlist = payload;
    },//保存购物车列表
    clear(state){
      state.shopcartlist = [];
    },//清空购物车
    //数量加1
    shopcart_add(state,payload){
      var index = state.shopcartlist.findIndex((item)=>{
        return item.id == payload.id;
      })
      if(index !=-1){//该商品已经在购物车中
        state.shopcartlist[index].count++;
      }else{
        //深拷贝商品对象，对深拷贝的对象添加count属性，值为1
        var good = JSON.parse(JSON.stringify(payload))
        good.count=1;
        state.shopcartlist.push(good)
      }
    },
    //数量减1
    shopcart_sub(state,payload){
      var index = state.shopcartlist.findIndex((item)=>{
        return item.id == payload.id;
      })
      if(index !=-1){//该商品已经在购物车中
        state.shopcartlist[index].count--;
      }
    },
  },

  actions: {//定义异步方法  特点：异步方法内部可以书写内部代码[ajax，定时器，事件监听],但是如果想要修改state中的数据必须间接调用同步方法执行修改
    request_favlist({store}){//获取当前用户的收藏列表
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shop_favlist({userid}).then((res)=>{
        console.log(res.data.list);
        store.commit('save_favlist',res.data.list)
      })
    },
    request_fav(store,payload){
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      //发请求，收藏店铺到服务器 数据库
      shop_fav({userid,shopid:payload.mtWmPoiId}).then((res)=>{
        if(res.data.code == 200){
          //调用同步方法 收藏到vuex
          store.commit('collect',payload);
        }
      })
    },
    request_unfav(store,payload){
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shop_unfav({userid,shopid:payload.mtWmPoiId}).then((res)=>{
        if(res.data.code == 200){
          store.commit('cancel_collect',payload);
        }
      })
    },

    request_shopcartlist(){//发请求，请求购物车列表
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;//获取本地存储中的用户id
      shopcart_list({userid}).then((res)=>{
        if(res.data.code==200){
          Store.commit('save_shopcartlist',res.data.list)
        }
      })
    }, 
    request_clear(store){//发请求，清空购物车
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_clear({userid}).then((res)=>{
        //调用同步方法，将本地vuex中的购物车数据清空
        if(res.data.code==200){
          store.commit('clear');
        }
      })
    },  
    //数量加1
    request_shopcart_add(store,payload){
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_add({userid,goodid:payload.id}).then((res)=>{
        if(res.data.code==200){
          store.commit('shopcart_add',payload);
        }
      })
    },
    //数量减1
    request_shopcart_sub(store,payload){
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_sub({userid,goodid:payload.id}).then((res)=>{
        if(res.data.code==200){
          store.commit('shopcart_sub',payload);
        }
      })
    },
  },
  modules: {//分模块管理state中的数据
  },
  plugins:[createLogger(),createPersistedState()]//配合其他插件管理state中的数据
})
